﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://ac.nowcoder.com/acm/problem/219641
/*
题目描述：
链接：https://ac.nowcoder.com/acm/problem/219641
来源：牛客网

有
𝑛

n 个果冻排成一排。第
𝑖

i 个果冻的美味度是
𝑎
𝑖
a
i
​
 。
天使非常喜欢吃果冻，但她想把最好吃的果冻留到最后收藏。天使想知道前
𝑥

x 个果冻中，美味度第二大的果冻有多少美味度？
一共有
𝑞

q 次询问。
注：如果最大的数有两个以上，默认第二大的等于最大的。例如，
[
2
,
3
,
4
,
2
,
4
]

[2,3,4,2,4]  这个序列，第二大的数是4。

输入描述:
第一行一个正整数
𝑛

n 。
第二行
𝑛

n 个正整数
𝑎
𝑖
a
i
​
 ，用空格隔开。
第三行一个正整数
𝑞

q 。
接下来的
𝑞

q 行，每行一个正整数
𝑥

x ，代表一次询问。
数据范围：1≤q≤1e5，1≤ai≤1e9，2≤x≤n≤1e5
输出描述:
输出
𝑞

q 行，每行一个正整数，代表一次询问，输出前
𝑥

x 个果冻中美味度第二大的值。
示例1
输入
复制
5
1 2 5 3 5
4
2
3
4
5
输出
复制
1
2
3
5
说明
前2个数，第二大的是1。
前3个数，第二大的是2。
前4个数，第二大的是3。
前5个数，第二大的是5。
*/

// 开始解题：
// 方法——动态规划
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
int nums[N];
const int INF = 0x3f3f3f3f;
int _max = -INF;
int second_max = -INF;
int dp[N]; // dp[i]表示[1, i]区间内的次大值
int n = 0, q = 0;


int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &nums[i]);
        if (nums[i] >= _max) {
            second_max = _max;
            _max = nums[i];
        }
        else if (nums[i] >= second_max) {
            second_max = nums[i];
        }
        dp[i] = second_max;
    }
    int x = 0;
    scanf("%d", &q);
    while (q--) {
        scanf("%d", &x);
        printf("%d\n", dp[x]);
    }
    return 0;
}